const seriesRegExp = /^cq\-btn\-\-s\d+n\d+$/;

// 不同类型的默认事件
const defaultEventType = {
	switch(el) {
		el.addEventListener('click', function () {
			this.classList.toggle('click');
		});
	},
};

class ButtonClass {
	el = null; // 元素
	series = []; // 该组件所属系列名
	constructor(params) {
		if (params.element) {
			this.el = document.querySelector(params.element);
			if (this.el) {
				this.el.classList.forEach((cls) => {
					const pass = seriesRegExp.test(cls);
					if (pass) this.series.push(cls);
				});
			}
		}
		this.bindDefaultEvents();
		this.bindEvents(params);
	}

	bindDefaultEvents() {
		if (Button.setup) return;
		this.el.cqDefaultEvent = true; // 告诉 cquery 该元素已设置默认事件
		// 导航按钮系列事件
		const isS1N1 = this.series.includes('cq-btn--s1n1');
		if (isS1N1) {
			defaultEventType.switch(this.el);
		}
	}

	bindEvents(params) {
		if (!this.el) return;
		// 点击事件
		if (params.onClick) {
			// 开关类型组件事件
			const isSwitch = this.series.includes('cq-btn--s1n1');
			this.el.addEventListener('click', (event) => {
				const isClick = this.el.classList.contains('click');
				if (isSwitch) {
					params.onClick(event, isClick);
				} else {
					params.onClick(event);
				}
			});
		}
	}
}

const Button = {
	setup: false, // 是否已全局安装
	create(params) {
		return new ButtonClass(params);
	},
  // 全局设置按钮默认行为
	setupDefault() {
		this.setup = true;
		// 系列1序号1 默认事件
		const btnS1N1 = document.querySelectorAll('.cq-btn--s1n1');
		if (btnS1N1 && btnS1N1.length > 0) {
			btnS1N1.forEach((el) => {
				if (!el.cqDefaultEvent) {
					defaultEventType.switch(el);
				}
			});
		}
	},
};

export default Button;
